#ifndef PLAYER_H
#define PLAYER_H

/**
Nectarine Utility Project is a software interface for the web system 'demovibes'
Copyright (C) 2010  Alexandre LAURENT

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.

website: http://code.google.com/p/nectarine-utility-project/
e-mail: lw.demoscene@gmail.com
**/

#include <QObject>

#include <phonon/MediaSource>
#include <phonon/MediaObject>
#include <phonon/AudioOutput>

#include <QString>
#include <QUrl>
#include <QMap>

class StreamPlayer : public QObject
{
    Q_OBJECT

private:

    Phonon::MediaObject* pStreamObject;
    Phonon::AudioOutput* pStreamOutput;
    Phonon::Path audioPath;

protected slots:
    void playerStateChanged(Phonon::State newstate);

signals:
    void playingStateSignal(void);
    void errorOccured(const QString errorMessage);

public slots:
    void decreaseVolume(void);
    void increaseVolume(void);
    void switchMuteVolume(void);

public:

    StreamPlayer(/*const QUrl& streamLink,*/ QObject* parent=0);
    ~StreamPlayer(void);

    void setSource(const QUrl& streamLink);
    const QUrl getSource(void)const { return pStreamObject->currentSource().url(); }

    Phonon::MediaObject* getMediaObject(void)const { return pStreamObject; }
    Phonon::AudioOutput* getAudioOutput(void)const { return pStreamOutput; }
    Phonon::Path* getAudioPath(void) { return &audioPath; }

    void play(void);
    void pause(void);
    void stop(void);

    QMap <QString, QString> getStreamInfo(void)const { return pStreamObject->metaData(); }
};

#endif // PLAYER_H
